/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * CriarTime.java
 *
 * Created on 01/05/2011, 03:56:21
 */
package Interface;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import ludi.Atleta;
import ludi.Curso;
import ludi.Modalidade;
import ludi.Usuario;
import ludi.Time;
import ludiExcecoes.GUILudi;
import ludiExcecoes.UsuarioExcecao;
import utils.BancoDeDados;

/**
 *
 * @author alison
 */
public class CriarTime extends javax.swing.JInternalFrame {

    BancoDeDados banco;
    Usuario usuario;
    Time time;
    ArrayList<String> listaDeCursos;
    ArrayList<Integer> listaDeModalidades;

    /** Creates new form CriarTime */
    public CriarTime(BancoDeDados banco, Usuario usuario, Time time) {
        try {
            this.banco = banco;
            this.usuario = usuario;
            this.time = time;
            this.listaDeCursos = banco.getListaDeCursos();
            this.listaDeModalidades = banco.getListaDeModalidades(null, null);
            initComponents();

            if (time == null){
                botaoAlterar.setEnabled(false);
                botaoExcluir.setEnabled(false);
            } else{
                botaoCadastrar.setEnabled(false);
                seletorCurso.setSelectedIndex(listaDeCursos.indexOf(time.getCurso()));
                seletorCurso.setEnabled(false);
                seletorModalidade.setSelectedIndex(listaDeModalidades.indexOf(time.getIdModalidade()));
                seletorModalidade.setEnabled(false);
            }

            if (usuario.getPermissoes() == 2){
                seletorCurso.setSelectedIndex(listaDeCursos.indexOf(usuario.getLogin()));
                seletorCurso.setEnabled(false);
            }           
            setVisible(true);
            updateModalidade();
        } catch (SQLException ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        seletorCurso = new javax.swing.JComboBox();

        ArrayList<String> nomesDosCursos = new ArrayList<String>(0);

        for (int i = 0; i < listaDeCursos.size(); i++){
            try {
                Curso curso = banco.getCurso(listaDeCursos.get(i));
                nomesDosCursos.add(curso.getNome() + " - " + curso.getLogin());
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        seletorCurso.setModel(new javax.swing.DefaultComboBoxModel(nomesDosCursos.toArray()))
        ;
        labelCurso = new javax.swing.JLabel();
        botaoCadastrar = new javax.swing.JButton();
        botaoCancelar = new javax.swing.JButton();
        seletorModalidade = new javax.swing.JComboBox();
        labelModalidade = new javax.swing.JLabel();
        scrollTabelaAtletas = new javax.swing.JScrollPane();
        tabelaAtletas = new javax.swing.JTable();
        labelQtdMinAtletas = new javax.swing.JLabel();
        labelQdtMaxAtletas = new javax.swing.JLabel();
        qtdMinAtletas = new javax.swing.JLabel();
        qtdMaxAtletas = new javax.swing.JLabel();
        labelQtdAtletasSelecionados = new javax.swing.JLabel();
        qtdAtletasSelecionados = new javax.swing.JLabel();
        botaoAlterar = new javax.swing.JButton();
        botaoExcluir = new javax.swing.JButton();
        labelSelecione = new javax.swing.JLabel();

        setClosable(true);
        setIconifiable(true);
        setTitle("Cadastrar Time");

        seletorCurso.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                seletorCursoActionPerformed(evt);
            }
        });

        labelCurso.setText("Curso");

        botaoCadastrar.setText("Cadastrar");
        botaoCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCadastrarActionPerformed(evt);
            }
        });

        botaoCancelar.setText("Cancelar");
        botaoCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCancelarActionPerformed(evt);
            }
        });

        ArrayList<String> nomesDasModalidades = new ArrayList<String>(0);

        for (int i = 0; i < listaDeModalidades.size(); i++){
            try {
                Modalidade mod = banco.getModalidade(listaDeModalidades.get(i));
                String genero = (mod.getGenero() == 1) ? "Masculino" : "Feminino";
                nomesDasModalidades.add(mod.getNome() + " - " + genero);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        seletorModalidade.setModel(new javax.swing.DefaultComboBoxModel(nomesDasModalidades.toArray()));
        seletorModalidade.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                seletorModalidadeActionPerformed(evt);
            }
        });

        labelModalidade.setText("Modalidade");

        ArrayList<Integer> listaDeAtletas;
        try {
            listaDeAtletas = banco.getListaDeAtletas(null, null);
        } catch (SQLException e) {
            listaDeAtletas = null;
        }
        tabelaAtletas.setAutoCreateRowSorter(true);
        tabelaAtletas.setBackground(new java.awt.Color(254, 254, 254));
        tabelaAtletas.setModel(modeloTabelaModalidades(listaDeAtletas));
        tabelaAtletas.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tabelaAtletas.getTableHeader().setReorderingAllowed(false);
        tabelaAtletas.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tabelaAtletasMouseClicked(evt);
            }
        });
        scrollTabelaAtletas.setViewportView(tabelaAtletas);

        labelQtdMinAtletas.setText("Quantidade Mínima de Atletas:");

        labelQdtMaxAtletas.setText("Quantidade Máxima de Atletas:");

        qtdMinAtletas.setText("0");

        qtdMaxAtletas.setText("0");

        labelQtdAtletasSelecionados.setText("Quantidade de Atletas Selecionados:");

        qtdAtletasSelecionados.setText("0");

        botaoAlterar.setText("Alterar");
        botaoAlterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoAlterarActionPerformed(evt);
            }
        });

        botaoExcluir.setText("Excluir");
        botaoExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoExcluirActionPerformed(evt);
            }
        });

        labelSelecione.setText("Selecione os atletas para este time:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(labelQtdAtletasSelecionados)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(qtdAtletasSelecionados)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 111, Short.MAX_VALUE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(botaoCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(botaoExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(12, 12, 12)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botaoAlterar, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(botaoCadastrar, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(scrollTabelaAtletas, javax.swing.GroupLayout.DEFAULT_SIZE, 588, Short.MAX_VALUE))
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(labelSelecione)
                .addContainerGap(356, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(labelQdtMaxAtletas)
                            .addComponent(labelQtdMinAtletas))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(qtdMinAtletas)
                            .addComponent(qtdMaxAtletas)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(27, 27, 27)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(labelCurso)
                            .addComponent(labelModalidade))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(seletorModalidade, 0, 357, Short.MAX_VALUE)
                            .addComponent(seletorCurso, 0, 357, Short.MAX_VALUE))))
                .addGap(129, 129, 129))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelCurso)
                    .addComponent(seletorCurso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(seletorModalidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelModalidade))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelQtdMinAtletas)
                    .addComponent(qtdMinAtletas))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelQdtMaxAtletas)
                    .addComponent(qtdMaxAtletas))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
                .addComponent(labelSelecione)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(scrollTabelaAtletas, javax.swing.GroupLayout.PREFERRED_SIZE, 222, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(labelQtdAtletasSelecionados)
                        .addComponent(qtdAtletasSelecionados))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(26, 26, 26)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(botaoCadastrar)
                            .addComponent(botaoAlterar)
                            .addComponent(botaoExcluir)
                            .addComponent(botaoCancelar))))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botaoCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoCancelarActionPerformed
       this.dispose();
    }//GEN-LAST:event_botaoCancelarActionPerformed

    private void seletorModalidadeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_seletorModalidadeActionPerformed
        updateModalidade();
    }//GEN-LAST:event_seletorModalidadeActionPerformed

    private void seletorCursoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_seletorCursoActionPerformed
        updateModalidade();
    }//GEN-LAST:event_seletorCursoActionPerformed

    private void tabelaAtletasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabelaAtletasMouseClicked
        updateLabelQtdAtletas();
    }//GEN-LAST:event_tabelaAtletasMouseClicked

    private void botaoCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoCadastrarActionPerformed
        try {
            ArrayList<Integer> listaDeAtletas = verificaDados();
            Curso curso = banco.getCurso(listaDeCursos.get(seletorCurso.getSelectedIndex()));
            ArrayList<Integer> listaDeTimes = curso.getListaDeTimes();

            Time timeInserir = new Time(listaDeModalidades.get(seletorModalidade.getSelectedIndex()), curso.getLogin());
            timeInserir.setListaDeAtletas(listaDeAtletas);
            int timeId = banco.insereTime(timeInserir);

            if (timeId > 0){
                listaDeTimes.add(timeId);
                curso.setListaDeTimes(listaDeTimes);
                banco.setCurso(curso);

                adicionarTimeAosAtletas(listaDeAtletas, timeId);

                JOptionPane.showMessageDialog(this, "Time cadastrado com sucesso!", "Cadastrar Time", JOptionPane.INFORMATION_MESSAGE);
                this.dispose();
            } else{
                JOptionPane.showMessageDialog(this, "Erro ao cadastrar time!", "Cadastrar Time", JOptionPane.ERROR_MESSAGE);
            }

        } catch (UsuarioExcecao ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        } catch (GUILudi ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_botaoCadastrarActionPerformed

    private void botaoExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoExcluirActionPerformed
        try {
            Curso curso = banco.getCurso(listaDeCursos.get(seletorCurso.getSelectedIndex()));
            ArrayList<Integer> listaDeTimes = curso.getListaDeTimes();

            listaDeTimes.remove((Integer) time.getId());
            curso.setListaDeTimes(listaDeTimes);
            banco.setCurso(curso);

            removerTimeDosAtletas(time.getListaDeAtletas(), time.getId());
            
            banco.deleteTime(time);

            JOptionPane.showMessageDialog(this, "Time excluído com sucesso!", "Cadastrar Time", JOptionPane.INFORMATION_MESSAGE);
            this.dispose();

        } catch (UsuarioExcecao ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_botaoExcluirActionPerformed

    private void botaoAlterarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoAlterarActionPerformed
        try {
            ArrayList<Integer> listaDeAtletas = verificaDados();
            Time timeInserir = new Time(listaDeModalidades.get(seletorModalidade.getSelectedIndex()), listaDeCursos.get(seletorCurso.getSelectedIndex()));
            timeInserir.setListaDeAtletas(listaDeAtletas);
            timeInserir.setId(time.getId());

            removerTimeDosAtletas(time.getListaDeAtletas(), time.getId());
            adicionarTimeAosAtletas(listaDeAtletas, time.getId());

            banco.setTime(timeInserir);

            JOptionPane.showMessageDialog(this, "Time alterado com sucesso!", "Cadastrar Time", JOptionPane.INFORMATION_MESSAGE);
            this.dispose();


        } catch (GUILudi ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_botaoAlterarActionPerformed

    private void adicionarTimeAosAtletas(ArrayList<Integer> listaDeAtletas, int timeId) throws SQLException{
        for (int i = 0; i < listaDeAtletas.size(); i++){
                    Atleta atleta = banco.getAtleta(listaDeAtletas.get(i));
                    ArrayList<Integer> listaDeTimesAtleta = atleta.getListaDeTimes();
                    listaDeTimesAtleta.add(timeId);
                    atleta.setListaDeTimes(listaDeTimesAtleta);
                    banco.setAtleta(atleta);
         }
    }

    private void removerTimeDosAtletas(ArrayList<Integer> listaDeAtletas, int timeId) throws SQLException{
        for (int i = 0; i < listaDeAtletas.size(); i++){
                    Atleta atleta = banco.getAtleta(listaDeAtletas.get(i));
                    ArrayList<Integer> listaDeTimesAtleta = atleta.getListaDeTimes();
                    listaDeTimesAtleta.remove((Integer) timeId);
                    atleta.setListaDeTimes(listaDeTimesAtleta);
                    banco.setAtleta(atleta);
         }
    }

    private void updateModalidade(){
        ArrayList<Integer> listaDeAtletas;
        try {
            listaDeAtletas = banco.getListaDeAtletas(null, null);
        } catch (SQLException e) {
            listaDeAtletas = null;
        }
        tabelaAtletas.setModel(modeloTabelaModalidades(listaDeAtletas));
        limitesModalidade();
        updateLabelQtdAtletas();
        tabelaAtletas.getColumnModel().getColumn(0).setMinWidth(20);
        tabelaAtletas.getColumnModel().getColumn(0).setMaxWidth(20);
        tabelaAtletas.getColumnModel().getColumn(1).setMinWidth(40);
        tabelaAtletas.getColumnModel().getColumn(1).setMaxWidth(40);
        tabelaAtletas.getColumnModel().getColumn(2).setMinWidth(372);
        tabelaAtletas.getColumnModel().getColumn(3).setMinWidth(90);
        tabelaAtletas.getColumnModel().getColumn(3).setPreferredWidth(90);
        tabelaAtletas.getColumnModel().getColumn(4).setMinWidth(60);
        tabelaAtletas.getColumnModel().getColumn(4).setPreferredWidth(60);
        tabelaAtletas.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    }

    private void updateLabelQtdAtletas(){
            int qtd = 0;
            for(int i = 0; i < tabelaAtletas.getRowCount(); i++){
               if (((Boolean) tabelaAtletas.getValueAt(i, 0)) == true){
                    qtd++;
                }
            }
            qtdAtletasSelecionados.setText(((Integer) qtd).toString());
    }

    private void limitesModalidade(){
        try {
            Modalidade modalidade = banco.getModalidade(listaDeModalidades.get(seletorModalidade.getSelectedIndex()));
            qtdMaxAtletas.setText(((Integer) modalidade.getQuantMaxAtletas()).toString());
            qtdMinAtletas.setText(((Integer) modalidade.getQuantMinAtletas()).toString());
            ArrayList<Integer> listaDeTimes = banco.getListaDeTimes(listaDeCursos.get(seletorCurso.getSelectedIndex()), "curso");

            if (time == null){
                int cont = 0;
                for(int i = 0; i< listaDeTimes.size(); i++){
                    if(banco.getTime(listaDeTimes.get(i)).getIdModalidade() == modalidade.getId()){
                        cont++;
                    }
                }
                if (cont >= modalidade.getQuantMaxTimes()){
                    botaoCadastrar.setEnabled(false);
                    JOptionPane.showMessageDialog(this, "Usuário já possui a quantidade\nmáxima de times para essa modalidade!\nUtilize o menu \"Conultar\"->\"Times Cadastrados\"\npara alterar ou excluir um time.", "Cadastrar Time", JOptionPane.INFORMATION_MESSAGE);
                } else{
                    botaoCadastrar.setEnabled(true);
                }
            }

        } catch (SQLException ex) {
            Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private DefaultTableModel modeloTabelaModalidades(ArrayList<Integer> listaDeAtletas){
        String[][] dados = new String [0][];
        String[] colunas = new String [] {"", "ID", "Nome", "Matrícula", "Curso"};

        DefaultTableModel modelo = new DefaultTableModel(dados, colunas){
                    Class[] types = new Class [] {
                        java.lang.Boolean.class, java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
                    };

                    boolean[] canEdit = new boolean [] {
                        true, false, false, false, false
                    };

                    @Override
                    public Class getColumnClass(int columnIndex) {
                        return types [columnIndex];
                    }

                    @Override
                    public boolean isCellEditable(int rowIndex, int columnIndex) {
                        return canEdit [columnIndex];
                    }
        };
        
        try {
                Modalidade modalidade = banco.getModalidade(listaDeModalidades.get(seletorModalidade.getSelectedIndex()));
                for (int i = 0; i < listaDeAtletas.size(); i++){
                    Atleta atleta = banco.getAtleta(listaDeAtletas.get(i));
                    if ((atleta.getGenero() == modalidade.getGenero()) && (banco.getCurso(atleta.getCurso()).getUnidade().equals(banco.getCurso(listaDeCursos.get(seletorCurso.getSelectedIndex())).getUnidade()))){
                        int j = 0;
                        boolean inserido = false;
                        while ((inserido == false) && (j < atleta.getListaDeTimes().size())){
                            if (banco.getTime(atleta.getListaDeTimes().get(j)).getIdModalidade() == modalidade.getId()){
                                inserido = true;
                                if (time == null){
                                    //disable
                                } else{
                                    if (atleta.getListaDeTimes().get(j) == time.getId()){
                                        modelo.addRow(new Object [] {true, atleta.getId(), atleta.getNome(), atleta.getMatricula(), atleta.getCurso()});
                                    } else{
                                        //disable
                                    }
                                }
                            }
                            j++;
                        }
                        if (inserido == false){
                            modelo.addRow(new Object [] {false, atleta.getId(), atleta.getNome(), atleta.getMatricula(), atleta.getCurso()});
                        }
                  }
               }
        }catch (SQLException ex) {
                   Logger.getLogger(CriarTime.class.getName()).log(Level.SEVERE, null, ex);
        }
        return modelo;
    }

    private ArrayList<Integer> verificaDados() throws GUILudi, SQLException{
        ArrayList<Integer> listaDeAtletas = new ArrayList<Integer>(0);
        int qtd = 0;

       for(int i = 0; i < tabelaAtletas.getRowCount(); i++){
           if (((Boolean) tabelaAtletas.getValueAt(i, 0)) == true){
               int j = 0;
               boolean inserido = false;
               Atleta atleta = banco.getAtleta((Integer) tabelaAtletas.getValueAt(i, 1));
               while ((inserido == false) && (j < atleta.getListaDeTimes().size())){
                   if (banco.getTime(atleta.getListaDeTimes().get(j)).getIdModalidade() == listaDeModalidades.get(seletorModalidade.getSelectedIndex())){
                        inserido = true;
                        if (time == null){
                            String string = "Atleta " + atleta.getNome() + " já está cadastrado\nem um outro time nesta modalidade!";
                            JOptionPane.showMessageDialog(this, string, "Cadastrar Time", JOptionPane.ERROR_MESSAGE);
                            updateModalidade();
                            throw new GUILudi("Dados invalidos!");
                        } else{
                            if (atleta.getListaDeTimes().get(j) == time.getId()){
                                listaDeAtletas.add(atleta.getId());
                                qtd++;
                            } else{
                                String string = "Atleta " + atleta.getNome() + " já está cadastrado\nem um outro time nesta modalidade!";
                                JOptionPane.showMessageDialog(this, string, "Cadastrar Time", JOptionPane.ERROR_MESSAGE);
                                updateModalidade();
                                throw new GUILudi("Dados invalidos!");
                            }
                        }
                   }
                   j++;
                }
                if (inserido == false){
                   listaDeAtletas.add(atleta.getId());
                   qtd++;
                }
            }
        }

        if (qtd > Integer.parseInt(qtdMaxAtletas.getText())){
            JOptionPane.showMessageDialog(this, "Quantidade de atletas selecionados\nmaior que o permitido nesta modalidade!", "Cadastrar Time", JOptionPane.ERROR_MESSAGE);
            throw new GUILudi("Dados invalidos!");
        }

        if (qtd < Integer.parseInt(qtdMinAtletas.getText())){
            JOptionPane.showMessageDialog(this, "Quantidade de atletas selecionados\nmenor que o exigido nesta modalidade!", "Cadastrar Time", JOptionPane.ERROR_MESSAGE);
            throw new GUILudi("Dados invalidos!");
        }
        return listaDeAtletas;
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botaoAlterar;
    private javax.swing.JButton botaoCadastrar;
    private javax.swing.JButton botaoCancelar;
    private javax.swing.JButton botaoExcluir;
    private javax.swing.JLabel labelCurso;
    private javax.swing.JLabel labelModalidade;
    private javax.swing.JLabel labelQdtMaxAtletas;
    private javax.swing.JLabel labelQtdAtletasSelecionados;
    private javax.swing.JLabel labelQtdMinAtletas;
    private javax.swing.JLabel labelSelecione;
    private javax.swing.JLabel qtdAtletasSelecionados;
    private javax.swing.JLabel qtdMaxAtletas;
    private javax.swing.JLabel qtdMinAtletas;
    private javax.swing.JScrollPane scrollTabelaAtletas;
    private javax.swing.JComboBox seletorCurso;
    private javax.swing.JComboBox seletorModalidade;
    private javax.swing.JTable tabelaAtletas;
    // End of variables declaration//GEN-END:variables
}
